/**
 * MongoDB 初始化工具
 * 用于启动时初始化MongoDB连接和数据同步
 */

import { connectMongoDB } from '../config/mongodb';
import { mongoDBService } from '../services/mongodb-service';
import * as path from 'path';

/**
 * 初始化MongoDB
 */
export async function initializeMongoDB(): Promise<void> {
  try {
    console.log('[MongoDB初始化] 开始初始化...');
    
    // 1. 连接数据库
    await connectMongoDB();
    
    // 2. 延迟2秒等待其他服务初始化
    await new Promise(resolve => setTimeout(resolve, 2000));
    
    // 3. 同步现有用户数据
    await syncExistingData();
    
    console.log('[MongoDB初始化] ✅ 初始化完成');
  } catch (error) {
    console.error('[MongoDB初始化] ❌ 初始化失败:', error);
    // 不抛出错误，允许服务器继续启动
  }
}

/**
 * 同步现有数据到MongoDB
 */
async function syncExistingData(): Promise<void> {
  try {
    console.log('[数据同步] 开始同步现有数据...');
    
    // 动态导入用户数据库（避免循环依赖）
    const authModule = await import('../routes/auth');
    const userDb = (authModule as any).userDb as Map<string, any>;
    
    if (userDb && userDb.size > 0) {
      console.log(`[数据同步] 发现 ${userDb.size} 个内存用户，开始同步...`);
      await mongoDBService.syncUsersFromMemory(userDb);
    } else {
      console.log('[数据同步] 未发现内存用户数据');
    }
    
    // 同步人脸数据
    const faceDataPath = path.join(process.cwd(), 'face_data.json');
    await mongoDBService.syncFaceDataFromFile(faceDataPath);
    
    console.log('[数据同步] ✅ 数据同步完成');
  } catch (error) {
    console.error('[数据同步] ❌ 数据同步失败:', error);
  }
}

/**
 * 创建示例数据（仅在开发环境）
 */
export async function createSampleData(): Promise<void> {
  if (process.env.NODE_ENV === 'production') {
    return;
  }
  
  try {
    console.log('[示例数据] 创建示例数据...');
    
    // 创建示例医疗告警
    const existingAlerts = await mongoDBService.getMedicalAlerts({ limit: 1 });
    if (existingAlerts.length === 0) {
      await mongoDBService.createMedicalAlert({
        type: 'device',
        title: 'CT设备需要维护',
        location: '影像科A区',
        status: 'active',
        priority: 'medium',
        description: '设备连续运行18小时，温度传感器异常',
        assignee: '医疗设备科'
      });
      
      await mongoDBService.createMedicalAlert({
        type: 'alert',
        title: '急诊科患者聚集告警',
        location: '急诊科等候区',
        status: 'active',
        priority: 'high',
        description: '等候区患者数量超出设计容量',
        assignee: '急诊科值班医生'
      });
      
      console.log('[示例数据] ✅ 医疗告警示例数据创建完成');
    }
    
    // 创建示例医疗设备
    const existingEquipment = await mongoDBService.getMedicalEquipment({ limit: 1 });
    if (existingEquipment.length === 0) {
      await mongoDBService.createMedicalEquipment({
        name: 'CT-01',
        type: 'ct',
        location: '影像科A区',
        status: 'active',
        description: '64排螺旋CT',
        specifications: '64排，层厚0.5mm',
        manufacturer: 'GE Healthcare'
      });
      
      await mongoDBService.createMedicalEquipment({
        name: 'MRI-01',
        type: 'mri',
        location: '影像科B区',
        status: 'active',
        description: '3.0T磁共振成像设备',
        specifications: '3.0T，32通道',
        manufacturer: 'Siemens'
      });
      
      console.log('[示例数据] ✅ 医疗设备示例数据创建完成');
    }
    
  } catch (error) {
    console.error('[示例数据] ❌ 创建示例数据失败:', error);
  }
}

/**
 * 定期数据同步任务
 */
export function startPeriodicSync(): void {
  // 每小时同步一次用户数据
  setInterval(async () => {
    try {
      console.log('[定期同步] 开始定期数据同步...');
      await syncExistingData();
    } catch (error) {
      console.error('[定期同步] 定期同步失败:', error);
    }
  }, 60 * 60 * 1000); // 1小时
  
  console.log('[定期同步] ✅ 定期同步任务已启动（每小时一次）');
}